home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / cgraphix / khardcpy.c < prev    next >
Text File  |  1986-05-13  |  2KB  |  98 lines

  1. /* «RM120»«PL99999»«TS4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76» */
  2. #include    <stdio.h>
  3. #define    EXTERN    extern
  4. #include    <typedef.h>
  5.  
  6. extern FILE    *fopen();
  7.  
  8. static FILE        *lst;
  9.  
  10.  
  11. int ConstructByte(col, row, top)
  12. int        row, col, top;
  13. {
  14.     static int    Bits[] = {128, 64, 32, 16, 8, 4, 2, 1};
  15.     int            CByte, k;
  16.  
  17.     CByte = 0;
  18.     for (k = 0; k <= top; k++) {
  19.         if (PD(col, row + k))
  20.             CByte = CByte | Bits[k];
  21.     }
  22.     return(CByte);
  23. }
  24.  
  25.  
  26. void doline(row, top, inverse, mode)
  27. int        row, top, inverse, mode;
  28. {
  29.     int        j, PrintByte;
  30.  
  31.     if (mode == 1) {
  32.         fputs("\033L", lst);
  33.     }
  34.     else {
  35.         fputs("\033*", lst);
  36.         fputc(mode, lst);
  37.     }
  38. /*    printf("Initialization code sent %x %x\n",
  39.         0x0ff & (XScreenMaxGlb + 1), (0xff00 & (XScreenMaxGlb + 1)) >> 8);
  40. */
  41.     fputc(0x0ff & (XScreenMaxGlb + 1), lst);
  42.     fputc((0xff00 & (XScreenMaxGlb + 1)) >> 8, lst);
  43.  
  44.     for (j = 0; j <= XScreenMaxGlb; j++) {            /* scan across columns    */
  45.         PrintByte = ConstructByte(j,row, top);        /* get byte description    */
  46.         if (inverse)                                /* if inverted image    */
  47.             PrintByte = NOT PrintByte;                /*    then invert it        */
  48.         fputc(PrintByte, lst);                        /* and print it            */
  49.     }
  50.     if (mode != 4) {
  51. /*        printf("doline CRLF\n");    */
  52.         fputs("\r\n", lst);
  53.     }
  54. }
  55.  
  56. void hardcopy(inverse, mode)
  57. int        inverse, mode;
  58. {
  59.     int        i, j, top;
  60.     int        fullim;
  61.     int        ColorLoc,PrintByte;
  62.  
  63.     if (NULL == (lst = fopen("prn:", "wb"))) {
  64.         fprintf(stderr, "Hardcopy: Cannot open printer for output.\n");
  65.         return;
  66.     }
  67.  
  68. /*    printf("Printer opened\n");        */
  69.     top = 7;                            /* top data bit [index origin 0 ]    */
  70.     ColorLoc = ColorGlb;
  71.     ColorGlb = 255;
  72.     mode = mode & 7;
  73.     if ((mode == 5) || (mode == 0))
  74.         mode = 4;
  75.  
  76.     fputs("\0333\030", lst);
  77. /*    printf("line spacing changed\n");    */
  78.  
  79.     fullim = 8* (int)((YMaxGlb + 1) / 8);
  80. /*    printf("Fullim is %d\n", fullim);    */
  81.     for (i = 0; i < fullim; i += 8) {
  82. /*        printf("Process line %d\n", i);    */
  83.         doline(i, 7, inverse, mode);
  84.     }
  85.  
  86.     if (fullim != YMaxGlb + 1) {
  87. /*        printf("Print partial line %d %d\n", fullim, YMaxGlb + 1 - fullim); */
  88.         doline(fullim, YMaxGlb + 1 - fullim, inverse, mode);
  89.     }
  90.  
  91.     fputs("\0332\r\n", lst);
  92.     ColorGlb = ColorLoc;
  93.  
  94.     fclose(lst);
  95. }
  96.  
  97.  
  98.